package com.kfm.base.oop3;

public class Demo {

    int num;

    public static void main(String[] args) {
        /*
            方法重写（覆盖） override： 继承是前提， 子类中声明了和父类方法同名、同参、同返回的方法。
             子类重写了父类的方法。
            子类继承父类中"看得见"的成员, 父类中的方法不满足现有的需求，所以子类重新去做定义(实现)。
            检查方法是否是重写，在子类方法上注解 @Override 如果不报错就是重写,所有的方法重写必须加 @Override

            instanceof 判断是否属于某一个类型，返回 boolean 值

            A extends B 实例化过程：  先有父类再有子类

            加载类 A 时，要先看类 B 是否被加载了(类 B 是否是第一次使用), 如果是第一次使用类 B 则先加载类 B 到内存，
            进行静态初始化(static 变量， static初始化器  <clinit>), 此时类 B 被加载到了内存中。
            然后再加载子类 A，进行静态初始化(static 变量， static初始化器)。此时类 A 也被加载到内存中。
            ps: 类只有在第一使用时进行加载及静态初始化

            实例化（new 对象） A: 现有父类对象再创建子类对象
            类 B 的实例初始化（实例初始化器， 构造 <init>）, 此时父类对象就创建完成了。
            类 A 的实例初始化（实例初始化器， 构造 <init>）, 此时对象就创建完成了。

         */

//        Animal duck = new Animal("鸭子", "禽类");
//
//        duck.show();
//        duck.say();


        Cat cat = new Cat("加菲猫");

        cat.print();

        cat.staticMethod();

//        System.out.println(Animal.b);
//        cat.show();
//        cat.say();
//
//        cat.sleep();
    }
}
